<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Interactive BOM for KiCAD</title>
  <style type="text/css">
:root {
  --pcb-edge-color: black;
  --pad-color: #878787;
  --pad-hole-color: #CCCCCC;
  --pad-color-highlight: #D04040;
  --pad-color-highlight-both: #D0D040;
  --pad-color-highlight-marked: #44a344;
  --pin1-outline-color: #ffb629;
  --pin1-outline-color-highlight: #ffb629;
  --pin1-outline-color-highlight-both: #fcbb39;
  --pin1-outline-color-highlight-marked: #fdbe41;
  --silkscreen-edge-color: #aa4;
  --silkscreen-polygon-color: #4aa;
  --silkscreen-text-color: #4aa;
  --fabrication-edge-color: #907651;
  --fabrication-polygon-color: #907651;
  --fabrication-text-color: #a27c24;
  --track-color: #def5f1;
  --track-color-highlight: #D04040;
  --zone-color: #def5f1;
  --zone-color-highlight: #d0404080;
}

html,
body {
  margin: 0px;
  height: 100%;
  font-family: Verdana, sans-serif;
}

.dark.topmostdiv {
  --pcb-edge-color: #eee;
  --pad-color: #808080;
  --pin1-outline-color: #ffa800;
  --pin1-outline-color-highlight: #ccff00;
  --track-color: #42524f;
  --zone-color: #42524f;
  background-color: #252c30;
  color: #eee;
}

button {
  background-color: #eee;
  border: 1px solid #888;
  color: black;
  height: 44px;
  width: 44px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 14px;
  font-weight: bolder;
}

.dark button {
  /* This will be inverted */
  background-color: #c3b7b5;
}

button.depressed {
  background-color: #0a0;
  color: white;
}

.dark button.depressed {
  /* This will be inverted */
  background-color: #b3b;
}

button:focus {
  outline: 0;
}

button#tb-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#lr-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#bom-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-grouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-ungrouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-netlist-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}

button#copy {
  background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
  background-position: 6px 6px;
  background-repeat: no-repeat;
  background-size: 26px 26px;
  border-radius: 6px;
  height: 40px;
  width: 40px;
  margin: 10px 5px;
}

button#copy:active {
  box-shadow: inset 0px 0px 5px #6c6c6c;
}

textarea.clipboard-temp {
  position: fixed;
  top: 0;
  left: 0;
  width: 2em;
  height: 2em;
  padding: 0;
  border: None;
  outline: None;
  box-shadow: None;
  background: transparent;
}

.left-most-button {
  border-right: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 6px;
}

.middle-button {
  border-right: 0;
}

.right-most-button {
  border-top-right-radius: 6px;
  border-bottom-right-radius: 6px;
}

.button-container {
  font-size: 0;
  margin: 0.4rem 0.4rem 0.4rem 0;
}

.dark .button-container {
  filter: invert(1);
}

.button-container button {
  background-size: 32px 32px;
  background-position: 5px 5px;
  background-repeat: no-repeat;
}

@media print {
  .hideonprint {
    display: none;
  }
}

canvas {
  cursor: crosshair;
}

canvas:active {
  cursor: grabbing;
}

.fileinfo {
  width: 100%;
  max-width: 1000px;
  border: none;
  padding: 3px;
}

.fileinfo .title {
  font-size: 20pt;
  font-weight: bold;
}

.fileinfo td {
  overflow: hidden;
  white-space: nowrap;
  max-width: 1px;
  width: 50%;
  text-overflow: ellipsis;
}

.bom {
  border-collapse: collapse;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 10pt;
  table-layout: fixed;
  width: 100%;
  margin-top: 1px;
  position: relative;
}

.bom th,
.bom td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

.dark .bom th,
.dark .bom td {
  border: 1px solid #777;
}

.bom th {
  background-color: #CCCCCC;
  background-clip: padding-box;
}

.dark .bom th {
  background-color: #3b4749;
}

.bom tr.highlighted:nth-child(n) {
  background-color: #cfc;
}

.dark .bom tr.highlighted:nth-child(n) {
  background-color: #226022;
}

.bom tr:nth-child(even) {
  background-color: #f2f2f2;
}

.dark .bom tr:nth-child(even) {
  background-color: #313b40;
}

.bom tr.checked {
  color: #1cb53d;
}

.dark .bom tr.checked {
  color: #2cce54;
}

.bom tr {
  transition: background-color 0.2s;
}

.bom .numCol {
  width: 30px;
}

.bom .value {
  width: 15%;
}

.bom .quantity {
  width: 65px;
}

.bom th .sortmark {
  position: absolute;
  right: 1px;
  top: 1px;
  margin-top: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent transparent #221 transparent;
  transform-origin: 50% 85%;
  transition: opacity 0.2s, transform 0.4s;
}

.dark .bom th .sortmark {
  filter: invert(1);
}

.bom th .sortmark.none {
  opacity: 0;
}

.bom th .sortmark.desc {
  transform: rotate(180deg);
}

.bom th:hover .sortmark.none {
  opacity: 0.5;
}

.bom .bom-checkbox {
  width: 30px;
  position: relative;
  user-select: none;
  -moz-user-select: none;
}

.bom .bom-checkbox:before {
  content: "";
  position: absolute;
  border-width: 15px;
  border-style: solid;
  border-color: #51829f transparent transparent transparent;
  visibility: hidden;
  top: -15px;
}

.bom .bom-checkbox:after {
  content: "Double click to set/unset all";
  position: absolute;
  color: white;
  top: -35px;
  left: -26px;
  background: #51829f;
  padding: 5px 15px;
  border-radius: 8px;
  white-space: nowrap;
  visibility: hidden;
}

.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
  visibility: visible;
  transition: visibility 0.2s linear 1s;
}

.split {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow-y: auto;
  overflow-x: hidden;
  background-color: inherit;
}

.split.split-horizontal,
.gutter.gutter-horizontal {
  height: 100%;
  float: left;
}

.gutter {
  background-color: #ddd;
  background-repeat: no-repeat;
  background-position: 50%;
  transition: background-color 0.3s;
}

.dark .gutter {
  background-color: #777;
}

.gutter.gutter-horizontal {
  background-image: url('');
  cursor: ew-resize;
  width: 5px;
}

.gutter.gutter-vertical {
  background-image: url('');
  cursor: ns-resize;
  height: 5px;
}

.searchbox {
  float: left;
  height: 40px;
  margin: 10px 5px;
  padding: 12px 32px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 18px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 6px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  background-image: url('');
  background-position: 10px 10px;
  background-repeat: no-repeat;
}

.dark .searchbox {
  background-color: #111;
  color: #eee;
}

.searchbox::placeholder {
  color: #ccc;
}

.dark .searchbox::placeholder {
  color: #666;
}

.filter {
  width: calc(60% - 64px);
}

.reflookup {
  width: calc(40% - 10px);
}

input[type=text]:focus {
  background-color: white;
  border: 1px solid #333;
}

.dark input[type=text]:focus {
  background-color: #333;
  border: 1px solid #ccc;
}

mark.highlight {
  background-color: #5050ff;
  color: #fff;
  padding: 2px;
  border-radius: 6px;
}

.dark mark.highlight {
  background-color: #76a6da;
  color: #111;
}

.menubtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
  background-position: center;
  background-repeat: no-repeat;
}

.statsbtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.iobtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.visbtn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
  padding: 15px;
}

#vismenu-content {
  left: 0px;
  font-family: Verdana, sans-serif;
}

.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
  filter: invert(1);
}

.flexbox {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.savebtn {
  background-color: #d6d6d6;
  width: auto;
  height: 30px;
  flex-grow: 1;
  margin: 5px;
  border-radius: 4px;
}

.savebtn:active {
  background-color: #0a0;
  color: white;
}

.dark .savebtn:active {
  /* This will be inverted */
  background-color: #b3b;
}

.stats {
  border-collapse: collapse;
  font-size: 12pt;
  table-layout: fixed;
  width: 100%;
  min-width: 450px;
}

.dark .stats td {
  border: 1px solid #bbb;
}

.stats td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

#checkbox-stats div {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#checkbox-stats .bar {
  background-color: rgba(28, 251, 0, 0.6);
}

.menu {
  position: relative;
  display: inline-block;
  margin: 0.4rem 0.4rem 0.4rem 0;
}

.menu-content {
  font-size: 12pt !important;
  text-align: left !important;
  font-weight: normal !important;
  display: none;
  position: absolute;
  background-color: white;
  right: 0;
  min-width: 300px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 100;
  padding: 8px;
}

.dark .menu-content {
  background-color: #111;
}

.menu:hover .menu-content {
  display: block;
}

.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
  background-color: #eee;
}

.menu-label {
  display: inline-block;
  padding: 8px;
  border: 1px solid #ccc;
  border-top: 0;
  width: calc(100% - 18px);
}

.menu-label-top {
  border-top: 1px solid #ccc;
}

.menu-textbox {
  float: left;
  height: 24px;
  margin: 10px 5px;
  padding: 5px 5px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 14px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 4px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  width: calc(100% - 10px);
}

.menu-textbox.invalid,
.dark .menu-textbox.invalid {
  color: red;
}

.dark .menu-textbox {
  background-color: #222;
  color: #eee;
}

.radio-container {
  margin: 4px;
}

.topmostdiv {
  display: flex;
  flex-direction: column;
  width: 100%;
  background-color: white;
  transition: background-color 0.3s;
}

#top {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  align-items: center;
}

#topdivider {
  border-bottom: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
}

.dark #topdivider {
  border-bottom: 2px solid #ccc;
}

#topdivider>div {
  position: relative;
}

#toptoggle {
  cursor: pointer;
  user-select: none;
  position: absolute;
  padding: 0.1rem 0.3rem;
  top: -0.4rem;
  left: -1rem;
  font-size: 1.4rem;
  line-height: 60%;
  border: 1px solid black;
  border-radius: 1rem;
  background-color: #fff;
  z-index: 100;
}

.flipped {
  transform: rotate(0.5turn);
}

.dark #toptoggle {
  border: 1px solid #fff;
  background-color: #222;
}

#fileinfodiv {
  flex: 20rem 1 0;
  overflow: auto;
}

#bomcontrols {
  display: flex;
  flex-direction: row-reverse;
}

#bomcontrols>* {
  flex-shrink: 0;
}

#dbg {
  display: block;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: #aaa;
}

::-webkit-scrollbar-thumb {
  background: #666;
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  margin: 3px 0;
  padding: 0;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  border-radius: 3px;
}

.slider:hover {
  opacity: 1;
}

.slider:focus {
  outline: none;
}

.slider::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  width: 100%;
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
  border: none;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin-top: -4px;
}

.dark .slider::-webkit-slider-thumb {
  background: #3d3;
}

.slider::-moz-range-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
}

.slider::-moz-range-track {
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
}

.dark .slider::-moz-range-thumb {
  background: #3d3;
}

.slider::-ms-track {
  width: 100%;
  height: 8px;
  border-width: 3px 0;
  background: transparent;
  border-color: transparent;
  color: transparent;
  transition: opacity .2s;
}

.slider::-ms-fill-lower {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-fill-upper {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin: 0;
}

.shameless-plug {
  font-size: 0.8em;
  text-align: center;
  display: block;
}

a {
  color: #0278a4;
}

.dark a {
  color: #00b9fd;
}

#frontcanvas,
#backcanvas {
  touch-action: none;
}

.placeholder {
  border: 1px dashed #9f9fda !important;
  background-color: #edf2f7 !important;
}

.dragging {
  z-index: 999;
}

.dark .dragging>table>tbody>tr {
  background-color: #252c30;
}

.dark .placeholder {
  filter: invert(1);
}

.column-spacer {
  top: 0;
  left: 0;
  width: calc(100% - 4px);
  position: absolute;
  cursor: pointer;
  user-select: none;
  height: 100%;
}

.column-width-handle {
  top: 0;
  right: 0;
  width: 4px;
  position: absolute;
  cursor: col-resize;
  user-select: none;
  height: 100%;
}

.column-width-handle:hover {
  background-color: #4f99bd;
}

.help-link {
  border: 1px solid #0278a4;
  padding-inline: 0.3rem;
  border-radius: 3px;
  cursor: pointer;
}

.dark .help-link {
  border: 1px solid #00b9fd;
}

.bom-color {
  width: 20%;
}

.color-column input {
  width: 1.6rem;
  height: 1rem;
  border: 1px solid black;
  cursor: pointer;
  padding: 0;
}

/* removes default styling from input color element */
::-webkit-color-swatch {
  border: none;
}

::-webkit-color-swatch-wrapper {
  padding: 0;
}

::-moz-color-swatch,
::-moz-focus-inner {
  border: none;
}

::-moz-focus-inner {
  padding: 0;
}
/* #bomhead {
    position: sticky;
    top: 0px;
    z-index: 1;
} */
  </style>
  <script type="text/javascript" >
///////////////////////////////////////////////
/*
  Split.js - v1.3.5
  MIT License
  https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});

///////////////////////////////////////////////

///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////

///////////////////////////////////////////////
/*!
 * PEP v0.4.3 | https://github.com/jquery/PEP
 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
 */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});

///////////////////////////////////////////////

///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////

///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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"))
///////////////////////////////////////////////

///////////////////////////////////////////////
/* Utility functions */

var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  pcbdata.metadata.revision + '__#';
var storage;

function initStorage(key) {
  try {
    window.localStorage.getItem("blank");
    storage = window.localStorage;
  } catch (e) {
    // localStorage not available
  }
  if (!storage) {
    try {
      window.sessionStorage.getItem("blank");
      storage = window.sessionStorage;
    } catch (e) {
      // sessionStorage also not available
    }
  }
}

function readStorage(key) {
  if (storage) {
    return storage.getItem(storagePrefix + key);
  } else {
    return null;
  }
}

function writeStorage(key, value) {
  if (storage) {
    storage.setItem(storagePrefix + key, value);
  }
}

function fancyDblClickHandler(el, onsingle, ondouble) {
  return function () {
    if (el.getAttribute("data-dblclick") == null) {
      el.setAttribute("data-dblclick", 1);
      setTimeout(function () {
        if (el.getAttribute("data-dblclick") == 1) {
          onsingle();
        }
        el.removeAttribute("data-dblclick");
      }, 200);
    } else {
      el.removeAttribute("data-dblclick");
      ondouble();
    }
  }
}

function smoothScrollToRow(rowid) {
  document.getElementById(rowid).scrollIntoView({
    behavior: "smooth",
    block: "center",
    inline: "nearest"
  });
}

function focusInputField(input) {
  input.scrollIntoView(false);
  input.focus();
  input.select();
}

function saveBomTable(output) {
  var text = '';
  for (var node of bomhead.childNodes[0].childNodes) {
    if (node.firstChild) {
      text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
    }
    if (node != bomhead.childNodes[0].lastChild) {
      text += (output == 'csv' ? ',' : '\t');
    }
  }
  text += '\n';
  for (var row of bombody.childNodes) {
    for (var cell of row.childNodes) {
      let val = '';
      for (var node of cell.childNodes) {
        if (node.nodeName == "INPUT") {
          if (node.checked) {
            val += '✓';
          }
        } else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
          val += node.firstChild.nodeValue;
        } else {
          val += node.nodeValue;
        }
      }
      if (output == 'csv') {
        val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
        if (isNumeric(val)) {
          val = +val;                     // use number
        } else {
          val = `"${val}"`;               // enclosed within double-quote
        }
      }
      text += val;
      if (cell != row.lastChild) {
        text += (output == 'csv' ? ',' : '\t');
      }
    }
    text += '\n';
  }

  if (output != 'clipboard') {
    // To file: csv or txt
    var blob = new Blob([text], {
      type: `text/${output}`
    });
    saveFile(`${pcbdata.metadata.title}.${output}`, blob);
  } else {
    // To clipboard
    var textArea = document.createElement("textarea");
    textArea.classList.add('clipboard-temp');
    textArea.value = text;

    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
      if (document.execCommand('copy')) {
        console.log('Bom copied to clipboard.');
      }
    } catch (err) {
      console.log('Can not copy to clipboard.');
    }

    document.body.removeChild(textArea);
  }
}

function isNumeric(str) {
  /* https://stackoverflow.com/a/175787 */
  return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}

function removeGutterNode(node) {
  for (var i = 0; i < node.childNodes.length; i++) {
    if (node.childNodes[i].classList &&
      node.childNodes[i].classList.contains("gutter")) {
      node.removeChild(node.childNodes[i]);
      break;
    }
  }
}

function cleanGutters() {
  removeGutterNode(document.getElementById("bot"));
  removeGutterNode(document.getElementById("canvasdiv"));
}

var units = {
  prefixes: {
    giga: ["G", "g", "giga", "Giga", "GIGA"],
    mega: ["M", "mega", "Mega", "MEGA"],
    kilo: ["K", "k", "kilo", "Kilo", "KILO"],
    milli: ["m", "milli", "Milli", "MILLI"],
    micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
    nano: ["N", "n", "nano", "Nano", "NANO"],
    pico: ["P", "p", "pico", "Pico", "PICO"],
  },
  unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  unitsLong: [
    "OHM", "Ohm", "ohm", "ohms",
    "FARAD", "Farad", "farad",
    "HENRY", "Henry", "henry"
  ],
  getMultiplier: function (s) {
    if (this.prefixes.giga.includes(s)) return 1e9;
    if (this.prefixes.mega.includes(s)) return 1e6;
    if (this.prefixes.kilo.includes(s)) return 1e3;
    if (this.prefixes.milli.includes(s)) return 1e-3;
    if (this.prefixes.micro.includes(s)) return 1e-6;
    if (this.prefixes.nano.includes(s)) return 1e-9;
    if (this.prefixes.pico.includes(s)) return 1e-12;
    return 1;
  },
  valueRegex: null,
}

function initUtils() {
  var allPrefixes = units.prefixes.giga
    .concat(units.prefixes.mega)
    .concat(units.prefixes.kilo)
    .concat(units.prefixes.milli)
    .concat(units.prefixes.micro)
    .concat(units.prefixes.nano)
    .concat(units.prefixes.pico);
  var allUnits = units.unitsShort.concat(units.unitsLong);
  units.valueRegex = new RegExp("^([0-9\.]+)" +
    "\\s*(" + allPrefixes.join("|") + ")?" +
    "(" + allUnits.join("|") + ")?" +
    "(\\b.*)?$", "");
  units.valueAltRegex = new RegExp("^([0-9]*)" +
    "(" + units.unitsShort.join("|") + ")?" +
    "([GgMmKkUuNnPp])?" +
    "([0-9]*)" +
    "(\\b.*)?$", "");
  if (config.fields.includes("Value")) {
    var index = config.fields.indexOf("Value");
    pcbdata.bom["parsedValues"] = {};
    for (var id in pcbdata.bom.fields) {
      pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
    }
  }
}

function parseValue(val, ref) {
  var inferUnit = (unit, ref) => {
    if (unit) {
      unit = unit.toLowerCase();
      if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
        unit = 'r';
      }
      unit = unit[0];
    } else {
      ref = /^([a-z]+)\d+$/i.exec(ref);
      if (ref) {
        ref = ref[1].toLowerCase();
        if (ref == "c") unit = 'f';
        else if (ref == "l") unit = 'h';
        else if (ref == "r" || ref == "rv") unit = 'r';
        else unit = null;
      }
    }
    return unit;
  };
  val = val.replace(/,/g, "");
  var match = units.valueRegex.exec(val);
  var unit;
  if (match) {
    val = parseFloat(match[1]);
    if (match[2]) {
      val = val * units.getMultiplier(match[2]);
    }
    unit = inferUnit(match[3], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[4],
    }
  }
  match = units.valueAltRegex.exec(val);
  if (match && (match[1] || match[4])) {
    val = parseFloat(match[1] + "." + match[4]);
    if (match[3]) {
      val = val * units.getMultiplier(match[3]);
    }
    unit = inferUnit(match[2], ref);
    if (!unit) return null;
    else return {
      val: val,
      unit: unit,
      extra: match[5],
    }
  }
  return null;
}

function valueCompare(a, b, stra, strb) {
  if (a === null && b === null) {
    // Failed to parse both values, compare them as strings.
    if (stra != strb) return stra > strb ? 1 : -1;
    else return 0;
  } else if (a === null) {
    return 1;
  } else if (b === null) {
    return -1;
  } else {
    if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
    else if (a.val != b.val) return a.val > b.val ? 1 : -1;
    else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
    else return 0;
  }
}

function validateSaveImgDimension(element) {
  var valid = false;
  var intValue = 0;
  if (/^[1-9]\d*$/.test(element.value)) {
    intValue = parseInt(element.value);
    if (intValue <= 16000) {
      valid = true;
    }
  }
  if (valid) {
    element.classList.remove("invalid");
  } else {
    element.classList.add("invalid");
  }
  return intValue;
}

function saveImage(layer) {
  var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  var bgcolor = null;
  if (!document.getElementById("render-save-transparent").checked) {
    var style = getComputedStyle(topmostdiv);
    bgcolor = style.getPropertyValue("background-color");
  }
  if (!width || !height) return;

  // Prepare image
  var canvas = document.createElement("canvas");
  var layerdict = {
    transform: {
      x: 0,
      y: 0,
      s: 1,
      panx: 0,
      pany: 0,
      zoom: 1,
    },
    bg: canvas,
    fab: canvas,
    silk: canvas,
    highlight: canvas,
    layer: layer,
  }
  // Do the rendering
  recalcLayerScale(layerdict, width, height);
  prepareLayer(layerdict);
  clearCanvas(canvas, bgcolor);
  drawBackground(layerdict, false);
  drawHighlightsOnLayer(layerdict, false);

  // Save image
  var imgdata = canvas.toDataURL("image/png");

  var filename = pcbdata.metadata.title;
  if (pcbdata.metadata.revision) {
    filename += `.${pcbdata.metadata.revision}`;
  }
  filename += `.${layer}.png`;
  saveFile(filename, dataURLtoBlob(imgdata));
}

function saveSettings() {
  var data = {
    type: "InteractiveHtmlBom settings",
    version: 1,
    pcbmetadata: pcbdata.metadata,
    settings: settings,
  }
  var blob = new Blob([JSON.stringify(data, null, 4)], {
    type: "application/json"
  });
  saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}

function loadSettings() {
  var input = document.createElement("input");
  input.type = "file";
  input.accept = ".settings.json";
  input.onchange = function (e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = readerEvent => {
      var content = readerEvent.target.result;
      var newSettings;
      try {
        newSettings = JSON.parse(content);
      } catch (e) {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      if (newSettings.type != "InteractiveHtmlBom settings") {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
      if (metadataMatches) {
        for (var k in pcbdata.metadata) {
          if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
            metadataMatches = false;
          }
        }
      }
      if (!metadataMatches) {
        var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
        var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
        if (!confirm(
          `Settins file metadata does not match current metadata.\n\n` +
          `Page metadata:\n${currentMetadata}\n\n` +
          `Settings file metadata:\n${fileMetadata}\n\n` +
          `Press OK if you would like to import settings anyway.`)) {
          return;
        }
      }
      overwriteSettings(newSettings.settings);
    }
    reader.readAsText(file, 'UTF-8');
  }
  input.click();
}

function resetSettings() {
  if (!confirm(
    `This will reset all checkbox states and other settings.\n\n` +
    `Press OK if you want to continue.`)) {
    return;
  }
  if (storage) {
    var keys = [];
    for (var i = 0; i < storage.length; i++) {
      var key = storage.key(i);
      if (key.startsWith(storagePrefix)) keys.push(key);
    }
    for (var key of keys) storage.removeItem(key);
  }
  location.reload();
}

function overwriteSettings(newSettings) {
  initDone = false;
  Object.assign(settings, newSettings);
  writeStorage("bomlayout", settings.bomlayout);
  writeStorage("bommode", settings.bommode);
  writeStorage("canvaslayout", settings.canvaslayout);
  writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  for (var checkbox of settings.checkboxes) {
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  }
  writeStorage("markWhenChecked", settings.markWhenChecked);
  padsVisible(settings.renderPads);
  document.getElementById("padsCheckbox").checked = settings.renderPads;
  fabricationVisible(settings.renderFabrication);
  document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  silkscreenVisible(settings.renderSilkscreen);
  document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  referencesVisible(settings.renderReferences);
  document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  valuesVisible(settings.renderValues);
  document.getElementById("valuesCheckbox").checked = settings.renderValues;
  tracksVisible(settings.renderTracks);
  document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  zonesVisible(settings.renderZones);
  document.getElementById("zonesCheckbox").checked = settings.renderZones;
  dnpOutline(settings.renderDnpOutline);
  document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  setRedrawOnDrag(settings.redrawOnDrag);
  document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  setDarkMode(settings.darkMode);
  document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  setHighlightPin1(settings.highlightpin1);
  document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  setOffsetBackRotation(settings.offsetBackRotation);
  document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
  initDone = true;
  prepCheckboxes();
  changeBomLayout(settings.bomlayout);
}

function saveFile(filename, blob) {
  var link = document.createElement("a");
  var objurl = URL.createObjectURL(blob);
  link.download = filename;
  link.href = objurl;
  link.click();
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime
  });
}

var settings = {
  canvaslayout: "FB",
  bomlayout: "left-right",
  bommode: "grouped",
  checkboxes: [],
  checkboxStoredRefs: {},
  darkMode: false,
  highlightpin1: "none",
  redrawOnDrag: true,
  boardRotation: 0,
  offsetBackRotation: false,
  renderPads: true,
  renderReferences: true,
  renderValues: true,
  renderSilkscreen: true,
  renderFabrication: true,
  renderDnpOutline: false,
  renderTracks: true,
  renderZones: true,
  columnOrder: [],
  hiddenColumns: [],
  netColors: {},
}

function initDefaults() {
  settings.bomlayout = readStorage("bomlayout");
  if (settings.bomlayout === null) {
    settings.bomlayout = config.bom_view;
  }
  if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
    settings.bomlayout = config.bom_view;
  }
  settings.bommode = readStorage("bommode");
  if (settings.bommode === null) {
    settings.bommode = "grouped";
  }
  if (settings.bommode == "netlist" && !pcbdata.nets) {
    settings.bommode = "grouped";
  }
  if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
    settings.bommode = "grouped";
  }
  settings.canvaslayout = readStorage("canvaslayout");
  if (settings.canvaslayout === null) {
    settings.canvaslayout = config.layer_view;
  }
  var bomCheckboxes = readStorage("bomCheckboxes");
  if (bomCheckboxes === null) {
    bomCheckboxes = config.checkboxes;
  }
  settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  document.getElementById("bomCheckboxes").value = bomCheckboxes;

  var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
  if (highlightpin1 === "false") highlightpin1 = "none";
  if (highlightpin1 === "true") highlightpin1 = "all";
  setHighlightPin1(highlightpin1);
  document.forms.highlightpin1.highlightpin1.value = highlightpin1;

  settings.markWhenChecked = readStorage("markWhenChecked") || "";
  populateMarkWhenCheckedOptions();

  function initBooleanSetting(storageString, def, elementId, func) {
    var b = readStorage(storageString);
    if (b === null) {
      b = def;
    } else {
      b = (b == "true");
    }
    document.getElementById(elementId).checked = b;
    func(b);
  }

  initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  if ("tracks" in pcbdata) {
    initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
    initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  } else {
    document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
    tracksVisible(false);
    zonesVisible(false);
  }
  initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);

  var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
  var hcols = JSON.parse(readStorage("hiddenColumns"));
  if (hcols === null) {
    hcols = [];
  }
  settings.hiddenColumns = hcols.filter(e => fields.includes(e));

  var cord = JSON.parse(readStorage("columnOrder"));
  if (cord === null) {
    cord = fields;
  } else {
    cord = cord.filter(e => fields.includes(e));
    if (cord.length != fields.length)
      cord = fields;
  }
  settings.columnOrder = cord;

  settings.boardRotation = readStorage("boardRotation");
  if (settings.boardRotation === null) {
    settings.boardRotation = config.board_rotation * 5;
  } else {
    settings.boardRotation = parseInt(settings.boardRotation);
  }
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);

  settings.netColors = JSON.parse(readStorage("netColors")) || {};
}

// Helper classes for user js callbacks.

const IBOM_EVENT_TYPES = {
  ALL: "all",
  HIGHLIGHT_EVENT: "highlightEvent",
  CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
  BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}

const EventHandler = {
  callbacks: {},
  init: function () {
    for (eventType of Object.values(IBOM_EVENT_TYPES))
      this.callbacks[eventType] = [];
  },
  registerCallback: function (eventType, callback) {
    this.callbacks[eventType].push(callback);
  },
  emitEvent: function (eventType, eventArgs) {
    event = {
      eventType: eventType,
      args: eventArgs,
    }
    var callback;
    for (callback of this.callbacks[eventType])
      callback(event);
    for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
      callback(event);
  }
}
EventHandler.init();

///////////////////////////////////////////////

///////////////////////////////////////////////
/* PCB rendering code */

var emptyContext2d = document.createElement("canvas").getContext("2d");

function deg2rad(deg) {
  return deg * Math.PI / 180;
}

function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  var point = [
    linepoint[0] * text.width + offsetx,
    linepoint[1] * text.height + offsety
  ];
  // This approximates pcbnew behavior with how text tilts depending on horizontal justification
  point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
  return point;
}

function drawText(ctx, text, color) {
  if ("ref" in text && !settings.renderReferences) return;
  if ("val" in text && !settings.renderValues) return;
  ctx.save();
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  ctx.lineWidth = text.thickness;
  if ("svgpath" in text) {
    ctx.stroke(new Path2D(text.svgpath));
    ctx.restore();
    return;
  }
  if ("polygons" in text) {
    ctx.fill(getPolygonsPath(text));
    ctx.restore();
    return;
  }
  ctx.translate(...text.pos);
  ctx.translate(text.thickness * 0.5, 0);
  var angle = -text.angle;
  if (text.attr.includes("mirrored")) {
    ctx.scale(-1, 1);
    angle = -angle;
  }
  var tilt = 0;
  if (text.attr.includes("italic")) {
    tilt = 0.125;
  }
  var interline = text.height * 1.5 + text.thickness;
  var txt = text.text.split("\n");
  // KiCad ignores last empty line.
  if (txt[txt.length - 1] == '') txt.pop();
  ctx.rotate(deg2rad(angle));
  var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
  offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
  for (var i in txt) {
    var lineWidth = text.thickness + interline / 2 * tilt;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        lineWidth += fourSpaces - lineWidth % fourSpaces;
      } else {
        if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
        }
        lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
      }
    }
    var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
    var inOverbar = false;
    for (var j = 0; j < txt[i].length; j++) {
      if (config.kicad_text_formatting) {
        if (txt[i][j] == '\t') {
          var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
          offsetx += fourSpaces - offsetx % fourSpaces;
          continue;
        } else if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
          if (txt[i][j] != '~') {
            inOverbar = !inOverbar;
          }
        }
      }
      var glyph = pcbdata.font_data[txt[i][j]];
      if (inOverbar) {
        var overbarStart = [offsetx, -text.height * 1.4 + offsety];
        var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];

        if (!lastHadOverbar) {
          overbarStart[0] += text.height * 1.4 * tilt;
          lastHadOverbar = true;
        }
        ctx.beginPath();
        ctx.moveTo(...overbarStart);
        ctx.lineTo(...overbarEnd);
        ctx.stroke();
      } else {
        lastHadOverbar = false;
      }
      for (var line of glyph.l) {
        ctx.beginPath();
        ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
        for (var k = 1; k < line.length; k++) {
          ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
        }
        ctx.stroke();
      }
      offsetx += glyph.w * text.width;
    }
    offsety += interline;
  }
  ctx.restore();
}

function drawedge(ctx, scalefactor, edge, color) {
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  if ("svgpath" in edge) {
    ctx.stroke(new Path2D(edge.svgpath));
  } else {
    ctx.beginPath();
    if (edge.type == "segment") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(...edge.end);
    }
    if (edge.type == "rect") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(edge.start[0], edge.end[1]);
      ctx.lineTo(...edge.end);
      ctx.lineTo(edge.end[0], edge.start[1]);
      ctx.lineTo(...edge.start);
    }
    if (edge.type == "arc") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        deg2rad(edge.startangle),
        deg2rad(edge.endangle));
    }
    if (edge.type == "circle") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        0, 2 * Math.PI);
      ctx.closePath();
    }
    if (edge.type == "curve") {
      ctx.moveTo(...edge.start);
      ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
    }
    if("filled" in edge && edge.filled)
      ctx.fill();
    else
      ctx.stroke();
  }
}

function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  var path = new Path2D();
  var width = size[0];
  var height = size[1];
  var x = width * -0.5;
  var y = height * -0.5;
  var chamfOffset = Math.min(width, height) * chamfratio;
  path.moveTo(x, 0);
  if (chamfpos & 4) {
    path.lineTo(x, y + height - chamfOffset);
    path.lineTo(x + chamfOffset, y + height);
    path.lineTo(0, y + height);
  } else {
    path.arcTo(x, y + height, x + width, y + height, radius);
  }
  if (chamfpos & 8) {
    path.lineTo(x + width - chamfOffset, y + height);
    path.lineTo(x + width, y + height - chamfOffset);
    path.lineTo(x + width, 0);
  } else {
    path.arcTo(x + width, y + height, x + width, y, radius);
  }
  if (chamfpos & 2) {
    path.lineTo(x + width, y + chamfOffset);
    path.lineTo(x + width - chamfOffset, y);
    path.lineTo(0, y);
  } else {
    path.arcTo(x + width, y, x, y, radius);
  }
  if (chamfpos & 1) {
    path.lineTo(x + chamfOffset, y);
    path.lineTo(x, y + chamfOffset);
    path.lineTo(x, 0);
  } else {
    path.arcTo(x, y, x, y + height, radius);
  }
  path.closePath();
  return path;
}

function getOblongPath(size) {
  return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}

function getPolygonsPath(shape) {
  if (shape.path2d) {
    return shape.path2d;
  }
  if ("svgpath" in shape) {
    shape.path2d = new Path2D(shape.svgpath);
  } else {
    var path = new Path2D();
    for (var polygon of shape.polygons) {
      path.moveTo(...polygon[0]);
      for (var i = 1; i < polygon.length; i++) {
        path.lineTo(...polygon[i]);
      }
      path.closePath();
    }
    shape.path2d = path;
  }
  return shape.path2d;
}

function drawPolygonShape(ctx, scalefactor, shape, color) {
  ctx.save();
  if (!("svgpath" in shape)) {
    ctx.translate(...shape.pos);
    ctx.rotate(deg2rad(-shape.angle));
  }
  if("filled" in shape && !shape.filled) {
    ctx.strokeStyle = color;
    ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
    ctx.lineCap = "round";
    ctx.lineJoin = "round";
    ctx.stroke(getPolygonsPath(shape));
  } else {
    ctx.fillStyle = color;
    ctx.fill(getPolygonsPath(shape));
  }
  ctx.restore();
}

function drawDrawing(ctx, scalefactor, drawing, color) {
  if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
    drawedge(ctx, scalefactor, drawing, color);
  } else if (drawing.type == "polygon") {
    drawPolygonShape(ctx, scalefactor, drawing, color);
  } else {
    drawText(ctx, drawing, color);
  }
}

function getCirclePath(radius) {
  var path = new Path2D();
  path.arc(0, 0, radius, 0, 2 * Math.PI);
  path.closePath();
  return path;
}

function getCachedPadPath(pad) {
  if (!pad.path2d) {
    // if path2d is not set, build one and cache it on pad object
    if (pad.shape == "rect") {
      pad.path2d = new Path2D();
      pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
    } else if (pad.shape == "oval") {
      pad.path2d = getOblongPath(pad.size);
    } else if (pad.shape == "circle") {
      pad.path2d = getCirclePath(pad.size[0] / 2);
    } else if (pad.shape == "roundrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
    } else if (pad.shape == "chamfrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
    } else if (pad.shape == "custom") {
      pad.path2d = getPolygonsPath(pad);
    }
  }
  return pad.path2d;
}

function drawPad(ctx, pad, color, outline) {
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  if (pad.offset) {
    ctx.translate(...pad.offset);
  }
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  var path = getCachedPadPath(pad);
  if (outline) {
    ctx.stroke(path);
  } else {
    ctx.fill(path);
  }
  ctx.restore();
}

function drawPadHole(ctx, pad, padHoleColor) {
  if (pad.type != "th") return;
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  ctx.fillStyle = padHoleColor;
  if (pad.drillshape == "oblong") {
    ctx.fill(getOblongPath(pad.drillsize));
  } else {
    ctx.fill(getCirclePath(pad.drillsize[0] / 2));
  }
  ctx.restore();
}

function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
  if (highlight) {
    // draw bounding box
    if (footprint.layer == layer) {
      ctx.save();
      ctx.globalAlpha = 0.2;
      ctx.translate(...footprint.bbox.pos);
      ctx.rotate(deg2rad(-footprint.bbox.angle));
      ctx.translate(...footprint.bbox.relpos);
      ctx.fillStyle = colors.pad;
      ctx.fillRect(0, 0, ...footprint.bbox.size);
      ctx.globalAlpha = 1;
      ctx.strokeStyle = colors.pad;
      ctx.lineWidth = 3 / scalefactor;
      ctx.strokeRect(0, 0, ...footprint.bbox.size);
      ctx.restore();
    }
  }
  // draw drawings
  for (var drawing of footprint.drawings) {
    if (drawing.layer == layer) {
      drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
    }
  }
  ctx.lineWidth = 3 / scalefactor;
  // draw pads
  if (settings.renderPads) {
    for (var pad of footprint.pads) {
      if (pad.layers.includes(layer)) {
        drawPad(ctx, pad, colors.pad, outline);
        if (pad.pin1 &&
          (settings.highlightpin1 == "all" ||
            settings.highlightpin1 == "selected" && highlight)) {
          drawPad(ctx, pad, colors.outline, true);
        }
      }
    }
    for (var pad of footprint.pads) {
      drawPadHole(ctx, pad, colors.padHole);
    }
  }
}

function drawEdgeCuts(canvas, scalefactor) {
  var ctx = canvas.getContext("2d");
  var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  for (var edge of pcbdata.edges) {
    drawDrawing(ctx, scalefactor, edge, edgecolor);
  }
}

function drawFootprints(canvas, layer, scalefactor, highlight) {
  var ctx = canvas.getContext("2d");
  ctx.lineWidth = 3 / scalefactor;
  var style = getComputedStyle(topmostdiv);

  var colors = {
    pad: style.getPropertyValue('--pad-color'),
    padHole: style.getPropertyValue('--pad-hole-color'),
    outline: style.getPropertyValue('--pin1-outline-color'),
  }

  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var mod = pcbdata.footprints[i];
    var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
    var h = highlightedFootprints.includes(i);
    var d = markedFootprints.has(i);
    if (highlight) {
      if(h && d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-both');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
      } else if (h) {
        colors.pad = style.getPropertyValue('--pad-color-highlight');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
      } else if (d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
      }
    }
    if( h || d || !highlight) {
      drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
    }
  }
}

function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  var ctx = canvas.getContext("2d");
  for (var d of pcbdata.drawings[layername][layer]) {
    if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
      drawedge(ctx, scalefactor, d, edgeColor);
    } else if (d.type == "polygon") {
      drawPolygonShape(ctx, scalefactor, d, polygonColor);
    } else {
      drawText(ctx, d, textColor);
    }
  }
}

function drawTracks(canvas, layer, defaultColor, highlight) {
  ctx = canvas.getContext("2d");
  ctx.lineCap = "round";

  var hasHole = (track) => (
    'drillsize' in track &&
    track.start[0] == track.end[0] &&
    track.start[1] == track.end[1]);

  // First draw tracks and tented vias
  for (var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    if (!hasHole(track)) {
      ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
      ctx.lineWidth = track.width;
      ctx.beginPath();
      if ('radius' in track) {
        ctx.arc(
          ...track.center,
          track.radius,
          deg2rad(track.startangle),
          deg2rad(track.endangle));
      } else {
        ctx.moveTo(...track.start);
        ctx.lineTo(...track.end);
      }
      ctx.stroke();
    }
  }
  // Second pass to draw untented vias
  var style = getComputedStyle(topmostdiv);
  var holeColor = style.getPropertyValue('--pad-hole-color')

  for (var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    if (hasHole(track)) {
      ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
      ctx.lineWidth = track.width;
      ctx.beginPath();
      ctx.moveTo(...track.start);
      ctx.lineTo(...track.end);
      ctx.stroke();
      ctx.strokeStyle = holeColor;
      ctx.lineWidth = track.drillsize;
      ctx.lineTo(...track.end);
      ctx.stroke();
    }
  }
}

function drawZones(canvas, layer, defaultColor, highlight) {
  ctx = canvas.getContext("2d");
  ctx.lineJoin = "round";
  for (var zone of pcbdata.zones[layer]) {
    if (highlight && highlightedNet != zone.net) continue;
    ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
    ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
    if (!zone.path2d) {
      zone.path2d = getPolygonsPath(zone);
    }
    ctx.fill(zone.path2d, zone.fillrule || "nonzero");
    if (zone.width > 0) {
      ctx.lineWidth = zone.width;
      ctx.stroke(zone.path2d);
    }
  }
}

function clearCanvas(canvas, color = null) {
  var ctx = canvas.getContext("2d");
  ctx.save();
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  if (color) {
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  } else {
    if (!window.matchMedia("print").matches)
      ctx.clearRect(0, 0, canvas.width, canvas.height);
  }
  ctx.restore();
}

function drawNets(canvas, layer, highlight) {
  var style = getComputedStyle(topmostdiv);
  if (settings.renderZones) {
    var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
    drawZones(canvas, layer, zoneColor, highlight);
  }
  if (settings.renderTracks) {
    var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
    drawTracks(canvas, layer, trackColor, highlight);
  }
  if (highlight && settings.renderPads) {
    var padColor = style.getPropertyValue('--pad-color-highlight');
    var padHoleColor = style.getPropertyValue('--pad-hole-color');
    var ctx = canvas.getContext("2d");
    for (var footprint of pcbdata.footprints) {
      // draw pads
      var padDrawn = false;
      for (var pad of footprint.pads) {
        if (highlightedNet != pad.net) continue;
        if (pad.layers.includes(layer)) {
          drawPad(ctx, pad, padColor, false);
          padDrawn = true;
        }
      }
      if (padDrawn) {
        // redraw all pad holes because some pads may overlap
        for (var pad of footprint.pads) {
          drawPadHole(ctx, pad, padHoleColor);
        }
      }
    }
  }
}

function drawHighlightsOnLayer(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.highlight);
  }
  if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
    drawFootprints(canvasdict.highlight, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom, true);
  }
  if (highlightedNet !== null) {
    drawNets(canvasdict.highlight, canvasdict.layer, true);
  }
}

function drawHighlights() {
  drawHighlightsOnLayer(allcanvas.front);
  drawHighlightsOnLayer(allcanvas.back);
}

function drawBackground(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.bg);
    clearCanvas(canvasdict.fab);
    clearCanvas(canvasdict.silk);
  }

  drawNets(canvasdict.bg, canvasdict.layer, false);
  drawFootprints(canvasdict.bg, canvasdict.layer,
    canvasdict.transform.s * canvasdict.transform.zoom, false);

  drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);

  var style = getComputedStyle(topmostdiv);
  var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  var textColor = style.getPropertyValue('--silkscreen-text-color');
  if (settings.renderSilkscreen) {
    drawBgLayer(
      "silkscreen", canvasdict.silk, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
  edgeColor = style.getPropertyValue('--fabrication-edge-color');
  polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  textColor = style.getPropertyValue('--fabrication-text-color');
  if (settings.renderFabrication) {
    drawBgLayer(
      "fabrication", canvasdict.fab, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
}

function prepareCanvas(canvas, flip, transform) {
  var ctx = canvas.getContext("2d");
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  ctx.scale(transform.zoom, transform.zoom);
  ctx.translate(transform.panx, transform.pany);
  if (flip) {
    ctx.scale(-1, 1);
  }
  ctx.translate(transform.x, transform.y);
  ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  ctx.scale(transform.s, transform.s);
}

function prepareLayer(canvasdict) {
  var flip = (canvasdict.layer === "B");
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  }
}

function rotateVector(v, angle) {
  angle = deg2rad(angle);
  return [
    v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
    v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  ];
}

function applyRotation(bbox, flip) {
  var corners = [
    [bbox.minx, bbox.miny],
    [bbox.minx, bbox.maxy],
    [bbox.maxx, bbox.miny],
    [bbox.maxx, bbox.maxy],
  ];
  corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  return {
    minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
    miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
    maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
    maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  }
}

function recalcLayerScale(layerdict, width, height) {
  var flip = (layerdict.layer === "B");
  var bbox = applyRotation(pcbdata.edges_bbox, flip);
  var scalefactor = 0.98 * Math.min(
    width / (bbox.maxx - bbox.minx),
    height / (bbox.maxy - bbox.miny)
  );
  if (scalefactor < 0.1) {
    scalefactor = 1;
  }
  layerdict.transform.s = scalefactor;
  if (flip) {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  } else {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  }
  layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    canvas = layerdict[c];
    canvas.width = width;
    canvas.height = height;
    canvas.style.width = (width / devicePixelRatio) + "px";
    canvas.style.height = (height / devicePixelRatio) + "px";
  }
}

function redrawCanvas(layerdict) {
  prepareLayer(layerdict);
  drawBackground(layerdict);
  drawHighlightsOnLayer(layerdict);
}

function resizeCanvas(layerdict) {
  var canvasdivid = {
    "F": "frontcanvas",
    "B": "backcanvas"
  } [layerdict.layer];
  var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  recalcLayerScale(layerdict, width, height);
  redrawCanvas(layerdict);
}

function resizeAll() {
  resizeCanvas(allcanvas.front);
  resizeCanvas(allcanvas.back);
}

function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  var A = x - x1;
  var B = y - y1;
  var C = x2 - x1;
  var D = y2 - y1;

  var dot = A * C + B * D;
  var len_sq = C * C + D * D;
  var dx, dy;
  if (len_sq == 0) {
    // start and end of the segment coincide
    dx = x - x1;
    dy = y - y1;
  } else {
    var param = dot / len_sq;
    var xx, yy;
    if (param < 0) {
      xx = x1;
      yy = y1;
    } else if (param > 1) {
      xx = x2;
      yy = y2;
    } else {
      xx = x1 + param * C;
      yy = y1 + param * D;
    }
    dx = x - xx;
    dy = y - yy;
  }
  return dx * dx + dy * dy <= d * d;
}

function modulo(n, mod) {
  return ((n % mod) + mod) % mod;
}

function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
  var dx = x - xc;
  var dy = y - yc;
  var r_sq = dx * dx + dy * dy;
  var rmin = Math.max(0, radius - d);
  var rmax = radius + d;

  if (r_sq < rmin * rmin || r_sq > rmax * rmax)
    return false;

  var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
  var dx1 = xc + radius * Math.cos(angle1) - x;
  var dy1 = yc + radius * Math.sin(angle1) - y;
  if (dx1 * dx1 + dy1 * dy1 <= d * d)
    return true;

  var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
  var dx2 = xc + radius * Math.cos(angle2) - x;
  var dy2 = yc + radius * Math.sin(angle2) - y;
  if (dx2 * dx2 + dy2 * dy2 <= d * d)
    return true;

  var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
  if (angle1 > angle2)
    return (angle >= angle2 || angle <= angle1);
  else
    return (angle >= angle1 && angle <= angle2);
}

function pointWithinPad(x, y, pad) {
  var v = [x - pad.pos[0], y - pad.pos[1]];
  v = rotateVector(v, pad.angle);
  if (pad.offset) {
    v[0] -= pad.offset[0];
    v[1] -= pad.offset[1];
  }
  return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}

function netHitScan(layer, x, y) {
  // Check track segments
  if (settings.renderTracks && pcbdata.tracks) {
    for (var track of pcbdata.tracks[layer]) {
      if ('radius' in track) {
        if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
          return track.net;
        }
      } else {
        if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
          return track.net;
        }
      }
    }
  }
  // Check pads
  if (settings.renderPads) {
    for (var footprint of pcbdata.footprints) {
      for (var pad of footprint.pads) {
        if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
          return pad.net;
        }
      }
    }
  }
  return null;
}

function pointWithinFootprintBbox(x, y, bbox) {
  var v = [x - bbox.pos[0], y - bbox.pos[1]];
  v = rotateVector(v, bbox.angle);
  return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
    bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}

function bboxHitScan(layer, x, y) {
  var result = [];
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var footprint = pcbdata.footprints[i];
    if (footprint.layer == layer) {
      if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
        result.push(i);
      }
    }
  }
  return result;
}

function handlePointerDown(e, layerdict) {
  if (e.button != 0 && e.button != 1) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  layerdict.pointerStates[e.pointerId] = {
    distanceTravelled: 0,
    lastX: e.offsetX,
    lastY: e.offsetY,
    downTime: Date.now(),
  };
}

function handleMouseClick(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var x = e.offsetX;
  var y = e.offsetY;
  var t = layerdict.transform;
  var flip = layerdict.layer === "B";
  if (flip) {
    x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  } else {
    x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  }
  y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
  if ("nets" in pcbdata) {
    var net = netHitScan(layerdict.layer, ...v);
    if (net !== highlightedNet) {
      netClicked(net);
    }
  }
  if (highlightedNet === null) {
    var footprints = bboxHitScan(layerdict.layer, ...v);
    if (footprints.length > 0) {
      footprintsClicked(footprints);
    }
  }
}

function handlePointerLeave(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();

  if (!settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }

  delete layerdict.pointerStates[e.pointerId];
}

function resetTransform(layerdict) {
  layerdict.transform.panx = 0;
  layerdict.transform.pany = 0;
  layerdict.transform.zoom = 1;
  redrawCanvas(layerdict);
}

function handlePointerUp(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  e.preventDefault();
  e.stopPropagation();

  if (e.button == 2) {
    // Reset pan and zoom on right click.
    resetTransform(layerdict);
    layerdict.anotherPointerTapped = false;
    return;
  }

  // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  var ptr = layerdict.pointerStates[e.pointerId];
  ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);

  if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
    if (Object.keys(layerdict.pointerStates).length == 1) {
      if (layerdict.anotherPointerTapped) {
        // This is the second pointer coming off of a two-finger tap
        resetTransform(layerdict);
      } else {
        // This is just a regular tap
        handleMouseClick(e, layerdict);
      }
      layerdict.anotherPointerTapped = false;
    } else {
      // This is the first finger coming off of what could become a two-finger tap
      layerdict.anotherPointerTapped = true;
    }
  } else {
    if (!settings.redrawOnDrag) {
      redrawCanvas(layerdict);
    }
    layerdict.anotherPointerTapped = false;
  }

  delete layerdict.pointerStates[e.pointerId];
}

function handlePointerMove(e, layerdict) {
  if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var thisPtr = layerdict.pointerStates[e.pointerId];

  var dx = e.offsetX - thisPtr.lastX;
  var dy = e.offsetY - thisPtr.lastY;

  // If this number is low on pointer up, we count the action as a click
  thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);

  if (Object.keys(layerdict.pointerStates).length == 1) {
    // This is a simple drag
    layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
    layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  } else if (Object.keys(layerdict.pointerStates).length == 2) {
    var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];

    var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
    var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));

    var scaleFactor = newDist / oldDist;

    if (scaleFactor != NaN) {
      layerdict.transform.zoom *= scaleFactor;

      var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
      layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
      layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
    }
  }

  thisPtr.lastX = e.offsetX;
  thisPtr.lastY = e.offsetY;

  if (settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }
}

function handleMouseWheel(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();
  var t = layerdict.transform;
  var wheeldelta = e.deltaY;
  if (e.deltaMode == 1) {
    // FF only, scroll by lines
    wheeldelta *= 30;
  } else if (e.deltaMode == 2) {
    wheeldelta *= 300;
  }
  var m = Math.pow(1.1, -wheeldelta / 40);
  // Limit amount of zoom per tick.
  if (m > 2) {
    m = 2;
  } else if (m < 0.5) {
    m = 0.5;
  }
  t.zoom *= m;
  var zoomd = (1 - m) / t.zoom;
  t.panx += devicePixelRatio * e.offsetX * zoomd;
  t.pany += devicePixelRatio * e.offsetY * zoomd;
  redrawCanvas(layerdict);
}

function addMouseHandlers(div, layerdict) {
  div.addEventListener("pointerdown", function(e) {
    handlePointerDown(e, layerdict);
  });
  div.addEventListener("pointermove", function(e) {
    handlePointerMove(e, layerdict);
  });
  div.addEventListener("pointerup", function(e) {
    handlePointerUp(e, layerdict);
  });
  var pointerleave = function(e) {
    handlePointerLeave(e, layerdict);
  }
  div.addEventListener("pointercancel", pointerleave);
  div.addEventListener("pointerleave", pointerleave);
  div.addEventListener("pointerout", pointerleave);

  div.onwheel = function(e) {
    handleMouseWheel(e, layerdict);
  }
  for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
    element.addEventListener("contextmenu", function(e) {
      e.preventDefault();
    }, false);
  }
}

function setRedrawOnDrag(value) {
  settings.redrawOnDrag = value;
  writeStorage("redrawOnDrag", value);
}

function setBoardRotation(value) {
  settings.boardRotation = value * 5;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  resizeAll();
}

function setOffsetBackRotation(value) {
  settings.offsetBackRotation = value;
  writeStorage("offsetBackRotation", value);
  resizeAll();
}

function initRender() {
  allcanvas = {
    front: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("F_bg"),
      fab: document.getElementById("F_fab"),
      silk: document.getElementById("F_slk"),
      highlight: document.getElementById("F_hl"),
      layer: "F",
    },
    back: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("B_bg"),
      fab: document.getElementById("B_fab"),
      silk: document.getElementById("B_slk"),
      highlight: document.getElementById("B_hl"),
      layer: "B",
    }
  };
  addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/*
 * Table reordering via Drag'n'Drop
 * Inspired by: https://htmldom.dev/drag-and-drop-table-column
 */

function setBomHandlers() {

  const bom = document.getElementById('bomtable');

  let dragName;
  let placeHolderElements;
  let draggingElement;
  let forcePopulation;
  let xOffset;
  let yOffset;
  let wasDragged;

  const mouseUpHandler = function(e) {
    // Delete dragging element
    draggingElement.remove();

    // Make BOM selectable again
    bom.style.removeProperty("userSelect");

    // Remove listeners
    document.removeEventListener('mousemove', mouseMoveHandler);
    document.removeEventListener('mouseup', mouseUpHandler);

    if (wasDragged) {
      // Redraw whole BOM
      populateBomTable();
    }
  }

  const mouseMoveHandler = function(e) {
    // Notice the dragging
    wasDragged = true;

    // Make the dragged element visible
    draggingElement.style.removeProperty("display");

    // Set elements position to mouse position
    draggingElement.style.left = `${e.screenX - xOffset}px`;
    draggingElement.style.top = `${e.screenY - yOffset}px`;

    // Forced redrawing of BOM table
    if (forcePopulation) {
      forcePopulation = false;
      // Copy array
      phe = Array.from(placeHolderElements);
      // populate BOM table again
      populateBomHeader(dragName, phe);
      populateBomBody(dragName, phe);
    }

    // Set up array of hidden columns
    var hiddenColumns = Array.from(settings.hiddenColumns);
    // In the ungrouped mode, quantity don't exist
    if (settings.bommode === "ungrouped")
      hiddenColumns.push("Quantity");
    // If no checkbox fields can be found, we consider them hidden
    if (settings.checkboxes.length == 0)
      hiddenColumns.push("checkboxes");

    // Get table headers and group them into checkboxes, extrafields and normal headers
    const bh = document.getElementById("bomhead");
    headers = Array.from(bh.querySelectorAll("th"))
    headers.shift() // numCol is not part of the columnOrder
    headerGroups = []
    lastCompoundClass = null;
    for (i = 0; i < settings.columnOrder.length; i++) {
      cElem = settings.columnOrder[i];
      if (hiddenColumns.includes(cElem)) {
        // Hidden columns appear as a dummy element
        headerGroups.push([]);
        continue;
      }
      elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
      if (elem.classList.contains("bom-checkbox")) {
        if (lastCompoundClass === "bom-checkbox") {
          cbGroup = headerGroups.pop();
          cbGroup.push(elem);
          headerGroups.push(cbGroup);
        } else {
          lastCompoundClass = "bom-checkbox";
          headerGroups.push([elem])
        }
      } else {
        headerGroups.push([elem])
      }
    }

    // Copy settings.columnOrder
    var columns = Array.from(settings.columnOrder)

    // Set up array with indices of hidden columns
    var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
    var dragIndex = columns.indexOf(dragName);
    var swapIndex = dragIndex;
    var swapDone = false;

    // Check if the current dragged element is swapable with the left or right element
    if (dragIndex > 0) {
      // Get left headers boundingbox
      swapIndex = dragIndex - 1;
      while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
        swapIndex--;
      if (!hiddenIndices.includes(swapIndex)) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }
    if ((!swapDone) && dragIndex < headerGroups.length - 1) {
      // Get right headers boundingbox
      swapIndex = dragIndex + 1;
      while (hiddenIndices.includes(swapIndex))
        swapIndex++;
      if (swapIndex < headerGroups.length) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }

    // Write back change to storage
    if (swapDone) {
      settings.columnOrder = columns
      writeStorage("columnOrder", JSON.stringify(columns));
    }

  }

  const mouseDownHandler = function(e) {
    var target = e.target;
    if (target.tagName.toLowerCase() != "td")
      target = target.parentElement;

    // Used to check if a dragging has ever happened
    wasDragged = false;

    // Create new element which will be displayed as the dragged column
    draggingElement = document.createElement("div")
    draggingElement.classList.add("dragging");
    draggingElement.style.display = "none";
    draggingElement.style.position = "absolute";
    draggingElement.style.overflow = "hidden";

    // Get bomhead and bombody elements
    const bh = document.getElementById("bomhead");
    const bb = document.getElementById("bombody");

    // Get all compound headers for the current column
    var compoundHeaders;
    if (target.classList.contains("bom-checkbox")) {
      compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
    } else {
      compoundHeaders = [target];
    }

    // Create new table which will display the column
    var newTable = document.createElement("table");
    newTable.classList.add("bom");
    newTable.style.background = "white";
    draggingElement.append(newTable);

    // Create new header element
    var newHeader = document.createElement("thead");
    newTable.append(newHeader);

    // Set up array for storing all placeholder elements
    placeHolderElements = [];

    // Add all compound headers to the new thead element and placeholders
    compoundHeaders.forEach(function(h) {
      clone = cloneElementWithDimensions(h);
      newHeader.append(clone);
      placeHolderElements.push(clone);
    });

    // Create new body element
    var newBody = document.createElement("tbody");
    newTable.append(newBody);

    // Get indices for compound headers
    var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));

    // For each row in the BOM body...
    var rows = bb.querySelectorAll("tr");
    rows.forEach(function(row) {
      // ..get the cells for the compound column
      const tds = row.querySelectorAll("td");
      var copytds = idxs.map(i => tds[i]);
      // Add them to the new element and the placeholders
      var newRow = document.createElement("tr");
      copytds.forEach(function(td) {
        clone = cloneElementWithDimensions(td);
        newRow.append(clone);
        placeHolderElements.push(clone);
      });
      newBody.append(newRow);
    });

    // Compute width for compound header
    var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
    draggingElement.style.width = `${width}px`;

    // Insert the new dragging element and disable selection on BOM
    bom.insertBefore(draggingElement, null);
    bom.style.userSelect = "none";

    // Determine the mouse position offset
    xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
    yOffset = e.screenY - compoundHeaders[0].offsetTop;

    // Get name for the column in settings.columnOrder
    dragName = getColumnOrderName(target);

    // Change text and class for placeholder elements
    placeHolderElements = placeHolderElements.map(function(e) {
      newElem = cloneElementWithDimensions(e);
      newElem.textContent = "";
      newElem.classList.add("placeholder");
      return newElem;
    });

    // On next mouse move, the whole BOM needs to be redrawn to show the placeholders
    forcePopulation = true;

    // Add listeners for move and up on mouse
    document.addEventListener('mousemove', mouseMoveHandler);
    document.addEventListener('mouseup', mouseUpHandler);
  }

  // In netlist mode, there is nothing to reorder
  if (settings.bommode === "netlist")
    return;

  // Add mouseDownHandler to every column except the numCol
  bom.querySelectorAll("th")
    .forEach(function(head) {
      if (!head.classList.contains("numCol")) {
        head.onmousedown = mouseDownHandler;
      }
    });

}

function getBoundingClientRectFromMultiple(elements) {
  var elems = Array.from(elements);

  if (elems.length == 0)
    return null;

  var box = elems.shift()
    .getBoundingClientRect();

  elems.forEach(function(elem) {
    var elembox = elem.getBoundingClientRect();
    box.left = Math.min(elembox.left, box.left);
    box.top = Math.min(elembox.top, box.top);
    box.width += elembox.width;
    box.height = Math.max(elembox.height, box.height);
  });

  return box;
}

function cloneElementWithDimensions(elem) {
  var newElem = elem.cloneNode(true);
  newElem.style.height = window.getComputedStyle(elem).height;
  newElem.style.width = window.getComputedStyle(elem).width;
  return newElem;
}

function getBomTableHeaderIndex(elem) {
  const bh = document.getElementById('bomhead');
  const ths = Array.from(bh.querySelectorAll("th"));
  return ths.indexOf(elem);
}

function getColumnOrderName(elem) {
  var cname = elem.getAttribute("col_name");
  if (cname === "bom-checkbox")
    return "checkboxes";
  else
    return cname;
}

function resizableGrid(tablehead) {
  var cols = tablehead.firstElementChild.children;
  var rowWidth = tablehead.offsetWidth;

  for (var i = 1; i < cols.length; i++) {
    if (cols[i].classList.contains("bom-checkbox"))
      continue;
    cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
  }

  for (var i = 1; i < cols.length - 1; i++) {
    var div = document.createElement('div');
    div.className = "column-width-handle";
    cols[i].appendChild(div);
    setListeners(div);
  }

  function setListeners(div) {
    var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;

    div.addEventListener('mousedown', function(e) {
      e.preventDefault();
      e.stopPropagation();

      curCol = e.target.parentElement;
      nxtCol = curCol.nextElementSibling;
      startX = e.pageX;

      var padding = paddingDiff(curCol);

      rowWidth = curCol.parentElement.offsetWidth;
      curColWidth = curCol.clientWidth - padding;
      nxtColWidth = nxtCol.clientWidth - padding;
    });

    document.addEventListener('mousemove', function(e) {
      if (startX) {
        var diffX = e.pageX - startX;
        diffX = -Math.min(-diffX, curColWidth - 20);
        diffX = Math.min(diffX, nxtColWidth - 20);

        curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
        nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
        console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
      }
    });

    document.addEventListener('mouseup', function(e) {
      curCol = undefined;
      nxtCol = undefined;
      startX = undefined;
      nxtColWidth = undefined;
      curColWidth = undefined
    });
  }

  function paddingDiff(col) {

    if (getStyleVal(col, 'box-sizing') == 'border-box') {
      return 0;
    }

    var padLeft = getStyleVal(col, 'padding-left');
    var padRight = getStyleVal(col, 'padding-right');
    return (parseInt(padLeft) + parseInt(padRight));

  }

  function getStyleVal(elm, css) {
    return (window.getComputedStyle(elm, null).getPropertyValue(css))
  }
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* DOM manipulation and misc code */

var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;

function dbg(html) {
  dbgdiv.innerHTML = html;
}

function redrawIfInitDone() {
  if (initDone) {
    redrawCanvas(allcanvas.front);
    redrawCanvas(allcanvas.back);
  }
}

function padsVisible(value) {
  writeStorage("padsVisible", value);
  settings.renderPads = value;
  redrawIfInitDone();
}

function referencesVisible(value) {
  writeStorage("referencesVisible", value);
  settings.renderReferences = value;
  redrawIfInitDone();
}

function valuesVisible(value) {
  writeStorage("valuesVisible", value);
  settings.renderValues = value;
  redrawIfInitDone();
}

function tracksVisible(value) {
  writeStorage("tracksVisible", value);
  settings.renderTracks = value;
  redrawIfInitDone();
}

function zonesVisible(value) {
  writeStorage("zonesVisible", value);
  settings.renderZones = value;
  redrawIfInitDone();
}

function dnpOutline(value) {
  writeStorage("dnpOutline", value);
  settings.renderDnpOutline = value;
  redrawIfInitDone();
}

function setDarkMode(value) {
  if (value) {
    topmostdiv.classList.add("dark");
  } else {
    topmostdiv.classList.remove("dark");
  }
  writeStorage("darkmode", value);
  settings.darkMode = value;
  redrawIfInitDone();
  if (initDone) {
    populateBomTable();
  }
}

function setShowBOMColumn(field, value) {
  if (field === "references") {
    var rl = document.getElementById("reflookup");
    rl.disabled = !value;
    if (!value) {
      rl.value = "";
      updateRefLookup("");
    }
  }

  var n = settings.hiddenColumns.indexOf(field);
  if (value) {
    if (n != -1) {
      settings.hiddenColumns.splice(n, 1);
    }
  } else {
    if (n == -1) {
      settings.hiddenColumns.push(field);
    }
  }

  writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));

  if (initDone) {
    populateBomTable();
  }

  redrawIfInitDone();
}


function setFullscreen(value) {
  if (value) {
    document.documentElement.requestFullscreen();
  } else {
    document.exitFullscreen();
  }
}

function fabricationVisible(value) {
  writeStorage("fabricationVisible", value);
  settings.renderFabrication = value;
  redrawIfInitDone();
}

function silkscreenVisible(value) {
  writeStorage("silkscreenVisible", value);
  settings.renderSilkscreen = value;
  redrawIfInitDone();
}

function setHighlightPin1(value) {
  writeStorage("highlightpin1", value);
  settings.highlightpin1 = value;
  redrawIfInitDone();
}

function getStoredCheckboxRefs(checkbox) {
  function convert(ref) {
    var intref = parseInt(ref);
    if (isNaN(intref)) {
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        if (pcbdata.footprints[i].ref == ref) {
          return i;
        }
      }
      return -1;
    } else {
      return intref;
    }
  }
  if (!(checkbox in settings.checkboxStoredRefs)) {
    var val = readStorage("checkbox_" + checkbox);
    settings.checkboxStoredRefs[checkbox] = val ? val : "";
  }
  if (!settings.checkboxStoredRefs[checkbox]) {
    return new Set();
  } else {
    return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  }
}

function getCheckboxState(checkbox, references) {
  var storedRefsSet = getStoredCheckboxRefs(checkbox);
  var currentRefsSet = new Set(references.map(r => r[1]));
  // Get difference of current - stored
  var difference = new Set(currentRefsSet);
  for (ref of storedRefsSet) {
    difference.delete(ref);
  }
  if (difference.size == 0) {
    // All the current refs are stored
    return "checked";
  } else if (difference.size == currentRefsSet.size) {
    // None of the current refs are stored
    return "unchecked";
  } else {
    // Some of the refs are stored
    return "indeterminate";
  }
}

function setBomCheckboxState(checkbox, element, references) {
  var state = getCheckboxState(checkbox, references);
  element.checked = (state == "checked");
  element.indeterminate = (state == "indeterminate");
}

function createCheckboxChangeHandler(checkbox, references, row) {
  return function () {
    refsSet = getStoredCheckboxRefs(checkbox);
    var markWhenChecked = settings.markWhenChecked == checkbox;
    eventArgs = {
      checkbox: checkbox,
      refs: references,
    }
    if (this.checked) {
      // checkbox ticked
      for (var ref of references) {
        refsSet.add(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.add("checked");
        for (var ref of references) {
          markedFootprints.add(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'checked';
    } else {
      // checkbox unticked
      for (var ref of references) {
        refsSet.delete(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.remove("checked");
        for (var ref of references) {
          markedFootprints.delete(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'unchecked';
    }
    settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
    updateCheckboxStats(checkbox);
    EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
  }
}

function clearHighlightedFootprints() {
  if (currentHighlightedRowId) {
    document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    currentHighlightedRowId = null;
    highlightedFootprints = [];
    highlightedNet = null;
  }
}

function createRowHighlightHandler(rowid, refs, net) {
  return function () {
    if (currentHighlightedRowId) {
      if (currentHighlightedRowId == rowid) {
        return;
      }
      document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    }
    document.getElementById(rowid).classList.add("highlighted");
    currentHighlightedRowId = rowid;
    highlightedFootprints = refs ? refs.map(r => r[1]) : [];
    highlightedNet = net;
    drawHighlights();
    EventHandler.emitEvent(
      IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
      rowid: rowid,
      refs: refs,
      net: net
    });
  }
}

function updateNetColors() {
  writeStorage("netColors", JSON.stringify(settings.netColors));
  redrawIfInitDone();
}

function netColorChangeHandler(net) {
  return (event) => {
    settings.netColors[net] = event.target.value;
    updateNetColors();
  }
}

function netColorRightClick(net) {
  return (event) => {
    if (event.button == 2) {
      event.preventDefault();
      event.stopPropagation();

      var style = getComputedStyle(topmostdiv);
      var defaultNetColor = style.getPropertyValue('--track-color').trim();
      event.target.value = defaultNetColor;
      delete settings.netColors[net];
      updateNetColors();
    }
  }
}

function entryMatches(entry) {
  if (settings.bommode == "netlist") {
    // entry is just a net name
    return entry.toLowerCase().indexOf(filter) >= 0;
  }
  // check refs
  if (!settings.hiddenColumns.includes("references")) {
    for (var ref of entry) {
      if (ref[0].toLowerCase().indexOf(filter) >= 0) {
        return true;
      }
    }
  }
  // check fields
  for (var i in config.fields) {
    var f = config.fields[i];
    if (!settings.hiddenColumns.includes(f)) {
      for (var ref of entry) {
        if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
          return true;
        }
      }
    }
  }
  return false;
}

function findRefInEntry(entry) {
  return entry.filter(r => r[0].toLowerCase() == reflookup);
}

function highlightFilter(s) {
  if (!filter) {
    return s;
  }
  var parts = s.toLowerCase().split(filter);
  if (parts.length == 1) {
    return s;
  }
  var r = "";
  var pos = 0;
  for (var i in parts) {
    if (i > 0) {
      r += '<mark class="highlight">' +
        s.substring(pos, pos + filter.length) +
        '</mark>';
      pos += filter.length;
    }
    r += s.substring(pos, pos + parts[i].length);
    pos += parts[i].length;
  }
  return r;
}

function checkboxSetUnsetAllHandler(checkboxname) {
  return function () {
    var checkboxnum = 0;
    while (checkboxnum < settings.checkboxes.length &&
      settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
      checkboxnum++;
    }
    if (checkboxnum >= settings.checkboxes.length) {
      return;
    }
    var allset = true;
    var checkbox;
    var row;
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      if (!checkbox.checked || checkbox.indeterminate) {
        allset = false;
        break;
      }
    }
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = !allset;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
  }
}

function createColumnHeader(name, cls, comparator, is_checkbox = false) {
  var th = document.createElement("TH");
  th.innerHTML = name;
  th.classList.add(cls);
  if (is_checkbox)
    th.setAttribute("col_name", "bom-checkbox");
  else
    th.setAttribute("col_name", name);
  var span = document.createElement("SPAN");
  span.classList.add("sortmark");
  span.classList.add("none");
  th.appendChild(span);
  var spacer = document.createElement("div");
  spacer.className = "column-spacer";
  th.appendChild(spacer);
  spacer.onclick = function () {
    if (currentSortColumn && th !== currentSortColumn) {
      // Currently sorted by another column
      currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
      currentSortColumn.childNodes[1].classList.add("none");
      currentSortColumn = null;
      currentSortOrder = null;
    }
    if (currentSortColumn && th === currentSortColumn) {
      // Already sorted by this column
      if (currentSortOrder == "asc") {
        // Sort by this column, descending order
        bomSortFunction = function (a, b) {
          return -comparator(a, b);
        }
        currentSortColumn.childNodes[1].classList.remove("asc");
        currentSortColumn.childNodes[1].classList.add("desc");
        currentSortOrder = "desc";
      } else {
        // Unsort
        bomSortFunction = null;
        currentSortColumn.childNodes[1].classList.remove("desc");
        currentSortColumn.childNodes[1].classList.add("none");
        currentSortColumn = null;
        currentSortOrder = null;
      }
    } else {
      // Sort by this column, ascending order
      bomSortFunction = comparator;
      currentSortColumn = th;
      currentSortColumn.childNodes[1].classList.remove("none");
      currentSortColumn.childNodes[1].classList.add("asc");
      currentSortOrder = "asc";
    }
    populateBomBody();
  }
  if (is_checkbox) {
    spacer.onclick = fancyDblClickHandler(
      spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
  }
  return th;
}

function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
  while (bomhead.firstChild) {
    bomhead.removeChild(bomhead.firstChild);
  }
  var tr = document.createElement("TR");
  var th = document.createElement("TH");
  th.classList.add("numCol");

  var vismenu = document.createElement("div");
  vismenu.id = "vismenu";
  vismenu.classList.add("menu");

  var visbutton = document.createElement("div");
  visbutton.classList.add("visbtn");
  visbutton.classList.add("hideonprint");

  var viscontent = document.createElement("div");
  viscontent.classList.add("menu-content");
  viscontent.id = "vismenu-content";

  settings.columnOrder.forEach(column => {
    if (typeof column !== "string")
      return;

    // Skip empty columns
    if (column === "checkboxes" && settings.checkboxes.length == 0)
      return;
    else if (column === "Quantity" && settings.bommode == "ungrouped")
      return;

    var label = document.createElement("label");
    label.classList.add("menu-label");

    var input = document.createElement("input");
    input.classList.add("visibility_checkbox");
    input.type = "checkbox";
    input.onchange = function (e) {
      setShowBOMColumn(column, e.target.checked)
    };
    input.checked = !(settings.hiddenColumns.includes(column));

    label.appendChild(input);
    if (column.length > 0)
      label.append(column[0].toUpperCase() + column.slice(1));

    viscontent.appendChild(label);
  });

  viscontent.childNodes[0].classList.add("menu-label-top");

  vismenu.appendChild(visbutton);
  if (settings.bommode != "netlist") {
    vismenu.appendChild(viscontent);
    th.appendChild(vismenu);
  }
  tr.appendChild(th);

  var checkboxCompareClosure = function (checkbox) {
    return (a, b) => {
      var stateA = getCheckboxState(checkbox, a);
      var stateB = getCheckboxState(checkbox, b);
      if (stateA > stateB) return -1;
      if (stateA < stateB) return 1;
      return 0;
    }
  }
  var stringFieldCompareClosure = function (fieldIndex) {
    return (a, b) => {
      var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
      var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
      if (fa != fb) return fa > fb ? 1 : -1;
      else return 0;
    }
  }
  var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
  var compareRefs = (a, b) => {
    var ra = referenceRegex.exec(a);
    var rb = referenceRegex.exec(b);
    if (ra === null || rb === null) {
      if (a != b) return a > b ? 1 : -1;
      return 0;
    } else {
      if (ra.groups.prefix != rb.groups.prefix) {
        return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
      }
      if (ra.groups.number != rb.groups.number) {
        return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
      }
      return 0;
    }
  }
  if (settings.bommode == "netlist") {
    tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
      if (a > b) return -1;
      if (a < b) return 1;
      return 0;
    }));
    tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
      return 0;
    }));
  } else {
    // Filter hidden columns
    var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
    var valueIndex = config.fields.indexOf("Value");
    var footprintIndex = config.fields.indexOf("Footprint");
    columns.forEach((column) => {
      if (column === placeHolderColumn) {
        var n = 1;
        if (column === "checkboxes")
          n = settings.checkboxes.length;
        for (i = 0; i < n; i++) {
          td = placeHolderElements.shift();
          tr.appendChild(td);
        }
        return;
      } else if (column === "checkboxes") {
        for (var checkbox of settings.checkboxes) {
          th = createColumnHeader(
            checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
          tr.appendChild(th);
        }
      } else if (column === "References") {
        tr.appendChild(createColumnHeader("References", "references", (a, b) => {
          var i = 0;
          while (i < a.length && i < b.length) {
            if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
            i++;
          }
          return a.length - b.length;
        }));
      } else if (column === "Value") {
        tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
          var ra = a[0][1], rb = b[0][1];
          return valueCompare(
            pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
            pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
        }));
        return;
      } else if (column === "Footprint") {
        tr.appendChild(createColumnHeader(
          "Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
      } else if (column === "Quantity" && settings.bommode == "grouped") {
        tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
          return a.length - b.length;
        }));
      } else {
        // Other fields
        var i = config.fields.indexOf(column);
        if (i < 0)
          return;
        tr.appendChild(createColumnHeader(
          column, `field${i + 1}`, stringFieldCompareClosure(i)));
      }
    });
  }
  bomhead.appendChild(tr);
}

function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
  const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
  while (bom.firstChild) {
    bom.removeChild(bom.firstChild);
  }
  highlightHandlers = [];
  footprintIndexToHandler = {};
  netsToHandler = {};
  currentHighlightedRowId = null;
  var first = true;
  var style = getComputedStyle(topmostdiv);
  var defaultNetColor = style.getPropertyValue('--track-color').trim();
  if (settings.bommode == "netlist") {
    bomtable = pcbdata.nets.slice();
  } else {
    switch (settings.canvaslayout) {
      case 'F':
        bomtable = pcbdata.bom.F.slice();
        break;
      case 'FB':
        bomtable = pcbdata.bom.both.slice();
        break;
      case 'B':
        bomtable = pcbdata.bom.B.slice();
        break;
    }
    if (settings.bommode == "ungrouped") {
      // expand bom table
      expandedTable = []
      for (var bomentry of bomtable) {
        for (var ref of bomentry) {
          expandedTable.push([ref]);
        }
      }
      bomtable = expandedTable;
    }
  }
  if (bomSortFunction) {
    bomtable = bomtable.sort(bomSortFunction);
  }
  for (var i in bomtable) {
    var bomentry = bomtable[i];
    if (filter && !entryMatches(bomentry)) {
      continue;
    }
    var references = null;
    var netname = null;
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    var rownum = +i + 1;
    tr.id = "bomrow" + rownum;
    td.textContent = rownum;
    tr.appendChild(td);
    if (settings.bommode == "netlist") {
      netname = bomentry;
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
      tr.appendChild(td);
      var color = settings.netColors[netname] || defaultNetColor;
      td = document.createElement("TD");
      var colorBox = document.createElement("INPUT");
      colorBox.type = "color";
      colorBox.value = color;
      colorBox.onchange = netColorChangeHandler(netname);
      colorBox.onmouseup = netColorRightClick(netname);
      colorBox.oncontextmenu = (e) => e.preventDefault();
      td.appendChild(colorBox);
      td.classList.add("color-column");
      tr.appendChild(td);
    } else {
      if (reflookup) {
        references = findRefInEntry(bomentry);
        if (references.length == 0) {
          continue;
        }
      } else {
        references = bomentry;
      }
      // Filter hidden columns
      var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
      columns.forEach((column) => {
        if (column === placeholderColumn) {
          var n = 1;
          if (column === "checkboxes")
            n = settings.checkboxes.length;
          for (i = 0; i < n; i++) {
            td = placeHolderElements.shift();
            tr.appendChild(td);
          }
          return;
        } else if (column === "checkboxes") {
          for (var checkbox of settings.checkboxes) {
            if (checkbox) {
              td = document.createElement("TD");
              var input = document.createElement("input");
              input.type = "checkbox";
              input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
              setBomCheckboxState(checkbox, input, references);
              if (input.checked && settings.markWhenChecked == checkbox) {
                tr.classList.add("checked");
              }
              td.appendChild(input);
              tr.appendChild(td);
            }
          }
        } else if (column === "References") {
          td = document.createElement("TD");
          td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
          tr.appendChild(td);
        } else if (column === "Quantity" && settings.bommode == "grouped") {
          // Quantity
          td = document.createElement("TD");
          td.textContent = references.length;
          tr.appendChild(td);
        } else {
          // All the other fields
          var field_index = config.fields.indexOf(column)
          if (field_index < 0)
            return;
          var valueSet = new Set();
          references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
          td = document.createElement("TD");
          var output = new Array();
          for (let item of valueSet) {
            const visible = highlightFilter(String(item));
            if (typeof item === 'string' && item.match(urlRegex)) {
              output.push(`<a href="${item}" target="_blank">${visible}</a>`);
            } else {
              output.push(visible);
            }
          }
          td.innerHTML = output.join(", ");
          tr.appendChild(td);
        }
      });
    }
    bom.appendChild(tr);
    var handler = createRowHighlightHandler(tr.id, references, netname);
    tr.onmousemove = handler;
    highlightHandlers.push({
      id: tr.id,
      handler: handler,
    });
    if (references !== null) {
      for (var refIndex of references.map(r => r[1])) {
        footprintIndexToHandler[refIndex] = handler;
      }
    }
    if (netname !== null) {
      netsToHandler[netname] = handler;
    }
    if ((filter || reflookup) && first) {
      handler();
      first = false;
    }
  }
  EventHandler.emitEvent(
    IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
    filter: filter,
    reflookup: reflookup,
    checkboxes: settings.checkboxes,
    bommode: settings.bommode,
  });
}

function highlightPreviousRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[highlightHandlers.length - 1].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[0].id == currentHighlightedRowId) {
      highlightHandlers[highlightHandlers.length - 1].handler();
    } else {
      for (var i = 0; i < highlightHandlers.length - 1; i++) {
        if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function highlightNextRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[0].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
      highlightHandlers[0].handler();
    } else {
      for (var i = 1; i < highlightHandlers.length; i++) {
        if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function populateBomTable() {
  populateBomHeader();
  populateBomBody();
  setBomHandlers();
  resizableGrid(bomhead);
}

function footprintsClicked(footprintIndexes) {
  var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
  for (var i = 1; i <= footprintIndexes.length; i++) {
    var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
    if (refIndex in footprintIndexToHandler) {
      lastClicked = refIndex;
      footprintIndexToHandler[refIndex]();
      smoothScrollToRow(currentHighlightedRowId);
      break;
    }
  }
}

function netClicked(net) {
  if (net in netsToHandler) {
    netsToHandler[net]();
    smoothScrollToRow(currentHighlightedRowId);
  } else {
    clearHighlightedFootprints();
    highlightedNet = net;
    drawHighlights();
  }
}

function updateFilter(input) {
  filter = input.toLowerCase();
  populateBomTable();
}

function updateRefLookup(input) {
  reflookup = input.toLowerCase();
  populateBomTable();
}

function changeCanvasLayout(layout) {
  document.getElementById("fl-btn").classList.remove("depressed");
  document.getElementById("fb-btn").classList.remove("depressed");
  document.getElementById("bl-btn").classList.remove("depressed");
  switch (layout) {
    case 'F':
      document.getElementById("fl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(1);
      }
      break;
    case 'B':
      document.getElementById("bl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(0);
      }
      break;
    default:
      document.getElementById("fb-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.setSizes([50, 50]);
      }
  }
  settings.canvaslayout = layout;
  writeStorage("canvaslayout", layout);
  resizeAll();
  changeBomMode(settings.bommode);
}

function populateMetadata() {
  document.getElementById("title").innerHTML = pcbdata.metadata.title;
  document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  document.getElementById("company").innerHTML = pcbdata.metadata.company;
  document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  if (pcbdata.metadata.title != "") {
    document.title = pcbdata.metadata.title + " BOM";
  }
  // Calculate board stats
  var fp_f = 0,
    fp_b = 0,
    pads_f = 0,
    pads_b = 0,
    pads_th = 0;
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    if (pcbdata.bom.skipped.includes(i)) continue;
    var mod = pcbdata.footprints[i];
    if (mod.layer == "F") {
      fp_f++;
    } else {
      fp_b++;
    }
    for (var pad of mod.pads) {
      if (pad.type == "th") {
        pads_th++;
      } else {
        if (pad.layers.includes("F")) {
          pads_f++;
        }
        if (pad.layers.includes("B")) {
          pads_b++;
        }
      }
    }
  }
  document.getElementById("stats-components-front").innerHTML = fp_f;
  document.getElementById("stats-components-back").innerHTML = fp_b;
  document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  document.getElementById("stats-th-pads").innerHTML = pads_th;
  // Update version string
  document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
    /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}

function changeBomLayout(layout) {
  document.getElementById("bom-btn").classList.remove("depressed");
  document.getElementById("lr-btn").classList.remove("depressed");
  document.getElementById("tb-btn").classList.remove("depressed");
  switch (layout) {
    case 'bom-only':
      document.getElementById("bom-btn").classList.add("depressed");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      document.getElementById("frontcanvas").style.display = "none";
      document.getElementById("backcanvas").style.display = "none";
      document.getElementById("topmostdiv").style.height = "";
      document.getElementById("topmostdiv").style.display = "block";
      break;
    case 'top-bottom':
      document.getElementById("tb-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("topmostdiv").style.height = "100%";
      document.getElementById("topmostdiv").style.display = "flex";
      document.getElementById("bomdiv").classList.remove("split-horizontal");
      document.getElementById("canvasdiv").classList.remove("split-horizontal");
      document.getElementById("frontcanvas").classList.add("split-horizontal");
      document.getElementById("backcanvas").classList.add("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        direction: "vertical",
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        onDragEnd: resizeAll
      });
      break;
    case 'left-right':
      document.getElementById("lr-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("topmostdiv").style.height = "100%";
      document.getElementById("topmostdiv").style.display = "flex";
      document.getElementById("bomdiv").classList.add("split-horizontal");
      document.getElementById("canvasdiv").classList.add("split-horizontal");
      document.getElementById("frontcanvas").classList.remove("split-horizontal");
      document.getElementById("backcanvas").classList.remove("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        direction: "vertical",
        onDragEnd: resizeAll
      });
  }
  settings.bomlayout = layout;
  writeStorage("bomlayout", layout);
  changeCanvasLayout(settings.canvaslayout);
}

function changeBomMode(mode) {
  document.getElementById("bom-grouped-btn").classList.remove("depressed");
  document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  document.getElementById("bom-netlist-btn").classList.remove("depressed");
  var chkbxs = document.getElementsByClassName("visibility_checkbox");

  switch (mode) {
    case 'grouped':
      document.getElementById("bom-grouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'ungrouped':
      document.getElementById("bom-ungrouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'netlist':
      document.getElementById("bom-netlist-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = true;
      }
  }

  writeStorage("bommode", mode);
  if (mode != settings.bommode) {
    settings.bommode = mode;
    bomSortFunction = null;
    currentSortColumn = null;
    currentSortOrder = null;
    clearHighlightedFootprints();
  }
  populateBomTable();
}

function focusFilterField() {
  focusInputField(document.getElementById("filter"));
}

function focusRefLookupField() {
  focusInputField(document.getElementById("reflookup"));
}

function toggleBomCheckbox(bomrowid, checkboxnum) {
  if (!bomrowid || checkboxnum > settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
  checkbox.checked = !checkbox.checked;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function checkBomCheckbox(bomrowid, checkboxname) {
  var checkboxnum = 0;
  while (checkboxnum < settings.checkboxes.length &&
    settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
    checkboxnum++;
  }
  if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
  checkbox.checked = true;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function setBomCheckboxes(value) {
  writeStorage("bomCheckboxes", value);
  settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
  prepCheckboxes();
  populateMarkWhenCheckedOptions();
  setMarkWhenChecked(settings.markWhenChecked);
}

function setMarkWhenChecked(value) {
  writeStorage("markWhenChecked", value);
  settings.markWhenChecked = value;
  markedFootprints.clear();
  for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
    markedFootprints.add(ref);
  }
  populateBomTable();
  drawHighlights();
}

function prepCheckboxes() {
  var table = document.getElementById("checkbox-stats");
  while (table.childElementCount > 1) {
    table.removeChild(table.lastChild);
  }
  if (settings.checkboxes.length) {
    table.style.display = "";
  } else {
    table.style.display = "none";
  }
  for (var checkbox of settings.checkboxes) {
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    td.innerHTML = checkbox;
    tr.appendChild(td);
    td = document.createElement("TD");
    td.id = "checkbox-stats-" + checkbox;
    var progressbar = document.createElement("div");
    progressbar.classList.add("bar");
    td.appendChild(progressbar);
    var text = document.createElement("div");
    text.classList.add("text");
    td.appendChild(text);
    tr.appendChild(td);
    table.appendChild(tr);
    updateCheckboxStats(checkbox);
  }
}

function populateMarkWhenCheckedOptions() {
  var container = document.getElementById("markWhenCheckedContainer");

  if (settings.checkboxes.length == 0) {
    container.parentElement.style.display = "none";
    return;
  }

  container.innerHTML = '';
  container.parentElement.style.display = "inline-block";

  function createOption(name, displayName) {
    var id = "markWhenChecked-" + name;

    var div = document.createElement("div");
    div.classList.add("radio-container");

    var input = document.createElement("input");
    input.type = "radio";
    input.name = "markWhenChecked";
    input.value = name;
    input.id = id;
    input.onchange = () => setMarkWhenChecked(name);
    div.appendChild(input);

    // Preserve the selected element when the checkboxes change
    if (name == settings.markWhenChecked) {
      input.checked = true;
    }

    var label = document.createElement("label");
    label.innerHTML = displayName;
    label.htmlFor = id;
    div.appendChild(label);

    container.appendChild(div);
  }
  createOption("", "None");
  for (var checkbox of settings.checkboxes) {
    createOption(checkbox, checkbox);
  }
}

function updateCheckboxStats(checkbox) {
  var checked = getStoredCheckboxRefs(checkbox).size;
  var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
  var percent = checked * 100.0 / total;
  var td = document.getElementById("checkbox-stats-" + checkbox);
  td.firstChild.style.width = percent + "%";
  td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}

function constrain(number, min, max) {
  return Math.min(Math.max(parseInt(number), min), max);
}

document.onkeydown = function (e) {
  switch (e.key) {
    case "n":
      if (document.activeElement.type == "text") {
        return;
      }
      if (currentHighlightedRowId !== null) {
        checkBomCheckbox(currentHighlightedRowId, "placed");
        highlightNextRow();
        e.preventDefault();
      }
      break;
    case "ArrowUp":
      highlightPreviousRow();
      e.preventDefault();
      break;
    case "ArrowDown":
      highlightNextRow();
      e.preventDefault();
      break;
    case "ArrowLeft":
    case "ArrowRight":
      if (document.activeElement.type != "text") {
        e.preventDefault();
        let boardRotationElement = document.getElementById("boardRotation")
        settings.boardRotation = parseInt(boardRotationElement.value);  // degrees / 5
        if (e.key == "ArrowLeft") {
          settings.boardRotation += 3;  // 15 degrees
        }
        else {
          settings.boardRotation -= 3;
        }
        settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
        boardRotationElement.value = settings.boardRotation
        setBoardRotation(settings.boardRotation);
      }
      break;
    default:
      break;
  }
  if (e.altKey) {
    switch (e.key) {
      case "f":
        focusFilterField();
        e.preventDefault();
        break;
      case "r":
        focusRefLookupField();
        e.preventDefault();
        break;
      case "z":
        changeBomLayout("bom-only");
        e.preventDefault();
        break;
      case "x":
        changeBomLayout("left-right");
        e.preventDefault();
        break;
      case "c":
        changeBomLayout("top-bottom");
        e.preventDefault();
        break;
      case "v":
        changeCanvasLayout("F");
        e.preventDefault();
        break;
      case "b":
        changeCanvasLayout("FB");
        e.preventDefault();
        break;
      case "n":
        changeCanvasLayout("B");
        e.preventDefault();
        break;
      default:
        break;
    }
    if (e.key >= '1' && e.key <= '9') {
      toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
      e.preventDefault();
    }
  }
}

function hideNetlistButton() {
  document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  document.getElementById("bom-netlist-btn").style.display = "none";
}

function topToggle() {
  var top = document.getElementById("top");
  var toptoggle = document.getElementById("toptoggle");
  if (top.style.display === "none") {
    top.style.display = "flex";
    toptoggle.classList.remove("flipped");
  } else {
    top.style.display = "none";
    toptoggle.classList.add("flipped");
  }
}

window.onload = function (e) {
  initUtils();
  initRender();
  initStorage();
  initDefaults();
  cleanGutters();
  populateMetadata();
  dbgdiv = document.getElementById("dbg");
  bom = document.getElementById("bombody");
  bomhead = document.getElementById("bomhead");
  filter = "";
  reflookup = "";
  if (!("nets" in pcbdata)) {
    hideNetlistButton();
  }
  initDone = true;
  setBomCheckboxes(document.getElementById("bomCheckboxes").value);
  // Triggers render
  changeBomLayout(settings.bomlayout);

  // Users may leave fullscreen without touching the checkbox. Uncheck.
  document.addEventListener('fullscreenchange', () => {
    if (!document.fullscreenElement)
      document.getElementById('fullscreenCheckbox').checked = false;
  });
}

window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);

///////////////////////////////////////////////

///////////////////////////////////////////////
// EventHandler.registerCallback(IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, () => {
//     for(var tr of bom.childNodes) {
//         tr.onclick = tr.onmousemove;
//         tr.onmousemove = null;
//     };
// });

///////////////////////////////////////////////
  </script>
</head>

<body>

<div id="topmostdiv" class="topmostdiv">
  <div id="top">
    <div id="fileinfodiv">
      <table class="fileinfo">
        <tbody>
          <tr>
            <td id="title" class="title" style="width: 70%">
              Title
            </td>
            <td id="revision" class="title" style="width: 30%">
              Revision
            </td>
          </tr>
          <tr>
            <td id="company">
              Company
            </td>
            <td id="filedate">
              Date
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <div id="bomcontrols">
      <div class="hideonprint menu">
        <button class="menubtn"></button>
        <div class="menu-content">
          <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
            <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
            Dark mode
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
            <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
            Full Screen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
            Fab layer
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
            Silkscreen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
            References
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
            Values
          </label>
          <div id="tracksAndZonesCheckboxes">
            <label class="menu-label" style="width: calc(50% - 18px)">
              <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
              Tracks
            </label><!-- This comment eats space! All of it!
            --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
              <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
              Zones
            </label>
          </div>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
            Pads
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
            DNP outlined
          </label>
          <label class="menu-label">
            <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
            Continuous redraw on drag
          </label>
          <label class="menu-label">
            Highlight first pin
            <form id="highlightpin1">
              <div class="flexbox">
                <label>
                  <input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
                  None
                </label>
                <label>
                  <input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
                  All
                </label>
                <label>
                  <input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
                  Selected
                </label>
              </div>
            </form>
          </label>
          <label class="menu-label">
            <span>Board rotation</span>
            <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
            <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
          </label>
          <label class="menu-label">
            <input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
            Offset back rotation
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Bom checkboxes</div>
            <input id="bomCheckboxes" class="menu-textbox" type=text
                   oninput="setBomCheckboxes(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Mark when checked</div>
            <div id="markWhenCheckedContainer"></div>
          </label>
          <label class="menu-label">
            <span class="shameless-plug">
              <span>Created using</span>
              <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
              <a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
            </span>
          </label>
        </div>
      </div>
      <div class="button-container hideonprint">
        <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                title="Front only">F
        </button>
        <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                title="Front and Back">FB
        </button>
        <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                title="Back only">B
        </button>
      </div>
      <div class="button-container hideonprint">
        <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                title="BOM only"></button>
        <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                title="BOM left, drawings right"></button>
        <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                title="BOM top, drawings bot"></button>
      </div>
      <div class="button-container hideonprint">
        <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                title="Grouped BOM"></button>
        <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                title="Ungrouped BOM"></button>
        <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                title="Netlist"></button>
      </div>
      <div class="hideonprint menu">
        <button class="statsbtn"></button>
        <div class="menu-content">
          <table class="stats">
            <tbody>
              <tr>
                <td width="40%">Board stats</td>
                <td>Front</td>
                <td>Back</td>
                <td>Total</td>
              </tr>
              <tr>
                <td>Components</td>
                <td id="stats-components-front">~</td>
                <td id="stats-components-back">~</td>
                <td id="stats-components-total">~</td>
              </tr>
              <tr>
                <td>Groups</td>
                <td id="stats-groups-front">~</td>
                <td id="stats-groups-back">~</td>
                <td id="stats-groups-total">~</td>
              </tr>
              <tr>
                <td>SMD pads</td>
                <td id="stats-smd-pads-front">~</td>
                <td id="stats-smd-pads-back">~</td>
                <td id="stats-smd-pads-total">~</td>
              </tr>
              <tr>
                <td>TH pads</td>
                <td colspan=3 id="stats-th-pads">~</td>
              </tr>
            </tbody>
          </table>
          <table class="stats">
            <col width="40%"/><col />
            <tbody id="checkbox-stats">
              <tr>
                <td colspan=2 style="border-top: 0">Checkboxes</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="hideonprint menu">
        <button class="iobtn"></button>
        <div class="menu-content">
          <div class="menu-label menu-label-top">
            <div style="margin-left: 5px;">Save board image</div>
            <div class="flexbox">
              <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
              <span>X</span>
              <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
            </div>
            <label>
              <input id="render-save-transparent" type="checkbox">
              Transparent background
            </label>
            <div class="flexbox">
              <button class="savebtn" onclick="saveImage('F')">Front</button>
              <button class="savebtn" onclick="saveImage('B')">Back</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Config and checkbox state</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveSettings()">Export</button>
              <button class="savebtn" onclick="loadSettings()">Import</button>
              <button class="savebtn" onclick="resetSettings()">Reset</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Save bom table as</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveBomTable('csv')">csv</button>
              <button class="savebtn" onclick="saveBomTable('txt')">txt</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div id="topdivider">
    <div class="hideonprint">
      <div id="toptoggle" onclick="topToggle()">︽</div>
    </div>
  </div>
  <div id="bot" class="split" style="flex: 1 1">
    <div id="bomdiv" class="split split-horizontal">
      <div style="width: 100%">
        <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
               oninput="updateRefLookup(this.value)">
        <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
               oninput="updateFilter(this.value)">
        <div class="button-container hideonprint" style="float: left; margin: 0;">
          <button id="copy" title="Copy bom table to clipboard"
               onclick="saveBomTable('clipboard')"></button>
        </div>
      </div>
      <div id="dbg"></div>
      <table class="bom" id="bomtable">
        <thead id="bomhead">
        </thead>
        <tbody id="bombody">
        </tbody>
      </table>
    </div>
    <div id="canvasdiv" class="split split-horizontal">
      <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
      <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
    </div>
  </div>
</div>

</body>

</html>
